home *** CD-ROM | disk | FTP | other *** search
-
- ;*****************************************************************
- ;*
- ;* BlitzPlay History
- ;*
- ;* V0: Initial release
- ;*
- ;*****************************************************************
-
- songnumadr.l=?SongNum
- maxsongadr.l=?MaxSong
- maxsong2adr.l=?MaxSong2
- fr_dataadr.l=?fr_data
- thxreplayeradr.l=?thxReplayer
- qcreplayadr.l=?QCReplay
- fucoreplayadr.l=?FUCOReplay
-
- Function.s Check{}
- SHARED maxsong2adr.l
- header$=Left$(Peek.s(Start(0)),4) ;What's the file header look like?
- If header$="GMOD" ;Bugger supporting A or XMOD, I'll let somebody else do it :)
- Function Return "GMOD" ;Is it a GMOD?
- EndIf ;No, then have another fit.
- If header$="THX"
- Function Return "THX"
- EndIf
- If header$="FUCO"
- If Peek.b(Start(0)+4)=-63
- Function Return "FUCO"
- EndIf
- EndIf
- If header$=""
- Function Return "SID" ;The only header info I have for PlaySID modules!
- EndIf
- If header$="FORM"
- header$=Left$(Peek.s(Start(0)+8),8) ;What's the file header _really_ look like?
- If header$="EMODEMIC"
- If Peek.w(Start(0)+20)=1
- Function Return "EMOD"
- EndIf
- Else
- If header$="8SVXVHDR"
- If Peek.l(Start(0)+16)=$14
- Function Return "IFF"
- EndIf
- EndIf
- EndIf
- EndIf
- If Left$(header$,3)="MMD"
- Function Return "MED"
- EndIf
- If Peek.w(Start(0))=$4efa ;Fred ?
- If Peek.w(Start(0)+4)=$4efa ;InitPlayer
- If Peek.w(Start(0)+8)=$4efa ;EndPlayer
- If Peek.w(Start(0)+$c)=$4efa ;FadeMusic
- Function Return "FRED" ;Module OK
- EndIf
- EndIf
- EndIf
- EndIf ;Module not OK
- If Peek.w(Start(0))=$48e7 ;Whittaker ?
- If Peek.w(Start(0)+$e)=$48e7 ;InitPlayer
- If Peek.w(Start(0)+$1c)=$48e7 ;Interrupt
- If Peek.w(Start(0)+$2a)=$48e7 ;EndPlayer
- If Peek.w(Start(0)+$38)=$48e7
- If Peek.w(Start(0)+$46)=$48e7
- Function Return "DWN" ;Module OK
- EndIf
- EndIf
- EndIf
- EndIf
- EndIf
- EndIf ;Module not OK
- DecodeModule 0,Start(0)
- If CheckTrackerID(0)
- Function Return "MOD"
- EndIf
- FreeTrackerModule 0
- Function Return ""
- End Function
-
- Function.s Begin{name$}
- SHARED numberofjumpadrs.b,modid$,songnumadr.l,thxreplayeradr.l,thxInitPlayer,qcreplayadr.l,sidplaybase.l,sidlen.l,sidadr.l
- SHARED header.l
- success.b=BLoad(name$,0,0,0,2)
- If success=0 Then Function Return " "
- modid$=Check{}
- playadr.l=Start(0) ;Yup, let's go the next step...
- Select modid$
- Case "GMOD"
- Poke.l songnumadr,1
- numberofjumpadrs=(Peek.l(playadr+$C)-$10)/4 ;Number of jump table entries
- Case "SID"
- sidlen.l=Length(0)
- sidadr.l=AllocVec_(sidlen,2)
- If sidadr=0 Then Pop Select:Function Return "File can't be opened!"
- CopyMem_ Start(0),sidadr,sidlen
- EraseAll
- header.l=AllocVec_(4096,2)
- If header=0 Then Pop Select:Function Return "Object could not be loaded."
- sidplaybase.l=OpenLibrary_(Null("playsid.library"),1.1)
- If sidplaybase=0 Then Pop Select:Function Return "sidplay.library v1.1+ NOT found."
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a6,sidplaybase
- JSR -$1e(a6)
- GetReg a6,sidplaybase
- GetReg d0,50
- JSR -$60(a6)
- GetReg a6,sidplaybase
- GetReg a0,Null(name$)
- GetReg a1,header
- JSR -$2a(a6)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "IFF"
- EraseAll
- LoadSound 0,name$
- Case "THX"
- MOVEM.l d0-d7/a0-a6,-(a7)
- MOVE.L #0,a0 ;auto-allocate public (MEMF_ANY) memory
- MOVE.L #0,a1 ;auto-allocate chip (MEMF_CHIP) memory
- GetReg a2,thxreplayeradr+thxInitPlayer
- JSR (a2)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "MED"
- SetMedVolume 63
- Case "MOD"
- TrackerVolume 63
- Case "EMOD"
- MOVEM.l d0-d7/a0-a6,-(a7)
- MOVE.l #63,d0
- MOVE.l #63,d1
- MOVE.l #63,d2
- GetReg a0,qcreplayadr
- JSR $14(a0)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case ""
- Erase 0
- Pop Select
- Function Return "Not a recognised module!"
- End Select
- Function Return ""
- End Function
-
- Function.s CreatorID{}
- SHARED modid$ ;Shouldn't be altered, except by Begin{}!
- id$=modid$
- Select modid$
- Case "GMOD"
- id$=Left$(Peek.s(Start(0)+4),4)
- Case "SID"
- id$="PSID"
- Case "DWN"
- id$="_DW_"
- Case "FRED"
- id$="Fred"
- Case "EMOD"
- id$="QuadraComposer"
- Case "MOD"
- id$=Left$(Peek.s(Start(0)+$438),4)
- End Select
- Function Return id$ ;What program was used to make the file?
- End Function
-
- Function.s InitMusic{}
- SHARED numberofjumpadrs.b,modid$,maxsongadr.l,maxsong2adr.l,fr_dataadr.l,thxInitModule,thxreplayeradr.l,qcreplayadr.l
- SHARED sidplaybase.l,sidlen.l,header.l,sidadr.l
- ret$=""
- Select modid$
- Case "GMOD"
- initmusic.l=Start(0)+$10 ;InitMusic offset
- noteplayer.l=Start(0)+$20 ;NotePlayer offset
- If numberofjumpadrs>4
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a0,?GMODnoteplayer ;Pointer to the noteplayer source
- MOVE.l #0,D0
- GetReg A1,noteplayer ;Supply module with noteplayer pointer
- JSR (A1)
- MOVEM.l (a7)+,d0-d7/a0-a6
- EndIf
- MOVEM.l d0-d7/a0-a6,-(a7)
- MOVE.l #0,D0
- GetReg A1,initmusic
- JSR (A1) ;Initialise the GMOD
- PutReg D0,check.l
- MOVEM.l (a7)+,d0-d7/a0-a6
- If check>0 ;Did it work?
- ret$=Peek.s(check)
- If ret$="" Then ret$="Undefined Error"
- EndIf ;Nope, then error me purple.
- Case "EMOD"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a0,Start(0)
- GetReg d0,Length(0)
- GetReg a1,qcreplayadr
- JSR (a1)
- PutReg d0,success.b
- MOVEM.l (a7)+,d0-d7/a0-a6
- If success Then ret$="Error"
- Case "THX"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a0,Start(0)
- GetReg a2,thxreplayeradr+thxInitModule
- JSR (a2)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "SID"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a6,sidplaybase
- GetReg a0,header
- GetReg a1,sidadr
- GetReg d0,sidlen
- JSR -$36(a6)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "FRED"
- Poke.l fr_dataadr.l,Start(0)
- Poke.l maxsongadr,Peek.l(maxsong2adr) ;copy buffer
- Case "MED"
- DecodeMedModule 0,Start(0)
- End Select
- Function Return ret$
-
- .GMODnoteplayer:
- IncBin "bin/note.lib"
- End Function
-
- Statement Finish{}
- SHARED songnumadr.l,maxsongadr.l,maxsong2adr.l,modid$,sidplaybase.l,sidadr.l,header.l
- Select modid$
- Case "IFF"
- Free Sound 0
- Case "SID"
- CloseLibrary_ sidplaybase
- FreeVec_ sidadr
- FreeVec_ header
- Case "MED"
- Free MedModule 0
- Case "MOD"
- FreeTrackerModule 0
- End Select
- EraseAll
- Poke.l songnumadr,1
- Poke.l maxsongadr,1
- Poke.l maxsong2adr,1
- End Statement
-
- Function.s StartMusic{}
- SHARED modid$,songnumadr.l,thxInitSubSong,thxreplayeradr.l,qcreplayadr.l,fucoreplayadr.l,sidplaybase.l,fr_dataadr.l
- Select modid$
- Case "GMOD"
- startmusic.l=Start(0)+$14 ;StartMusic offset
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg d0,Peek.l(songnumadr)
- SUB.l #1,d0
- GetReg A1,startmusic
- JSR (A1) ;And now we finally start playing!
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "EMOD"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a0,qcreplayadr
- JSR 4(a0)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "DWN"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a0,Start(0)
- JSR (a0)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "IFF"
- LoopSound 0,3
- Case "THX"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg d0,Peek.l(songnumadr) ;subsong
- MOVE.l #0,d1 ;play immediately
- GetReg a2,thxreplayeradr+thxInitSubSong
- JSR (a2)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "SID"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a6,sidplaybase
- GetReg d0,Peek.l(songnumadr)
- JSR -$3c(a6)
- PutReg d0,err.l
- MOVEM.l (a7)+,d0-d7/a0-a6
- If err=-3 Then Pop Select:Finish{}:Function Return "Could NOT allocate CIAA timer."
- Case "FUCO"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a0,Start(0)
- GetReg a1,fucoreplayadr
- JSR (a1)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "FRED"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg d0,Peek.l(songnumadr)-1
- GetReg a0,Peek.l(fr_dataadr)
- JSR (a0) ;Init Sound
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "MED"
- StartMedModule 0
- Case "MOD"
- success.b=StartTracker(0)
- If success=0
- Pop Select
- Function Return "Not a valid module!"
- EndIf
- End Select
- Function Return ""
- End Function
-
- Statement StopMusic{}
- SHARED modid$,fr_dataadr.l,thxStopSong,thxreplayeradr.l,qcreplayadr.l,fucoreplayadr.l,sidplaybase.l
- Select modid$
- Case "GMOD"
- stopmusic.l=Start(0)+$18 ;StopMusic offset
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg A1,stopmusic ;Enough of that noise!
- JSR (A1) ;Just stop, stop it, leave me alone!
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "SID"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a6,sidplaybase
- JSR -$42(a6)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "IFF"
- Volume 3,0
- Case "FRED"
- MOVEM.l d0-d7/a0-a6,-(a7)
- MOVEQ #0,d1
- GetReg a0,Peek.l(fr_dataadr)
- JSR 8(a0) ;End Sound
- MOVEQ #0,d0
- LEA $dff000,a0
- MOVE.w d0,$a8(a0)
- MOVE.w d0,$b8(a0)
- MOVE.w d0,$c8(a0)
- MOVE.w d0,$d8(a0)
- MOVE.w #$f,$96(a0)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "DWN"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a0,Start(0)
- JSR $1c(a0)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "EMOD"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a0,qcreplayadr
- JSR $c(a0)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "FUCO"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a0,fucoreplayadr
- JSR 8(a0)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "THX"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a2,thxreplayeradr+thxStopSong
- JSR (a2)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "MED"
- StopMed
- Case "MOD"
- PauseModule
- End Select
- End Statement
-
- Statement EndMusic{}
- SHARED modid$,thxKillPlayer,thxreplayeradr.l,qcreplayadr.l,sidplaybase.l
- Select modid$
- Case "GMOD"
- endmusic.l=Start(0)+$1C ;EndMusic offset
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg A1,endmusic
- JSR (A1) ;A neat'n'tidy cleanup.
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "SID"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a6,sidplaybase
- JSR -$24(a6)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "EMOD"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a0,qcreplayadr
- JSR $10(a0)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "THX"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a2,thxreplayeradr+thxKillPlayer
- JSR (a2)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "MOD"
- StopTracker
- End Select
- End Statement
-
- Function.b ContinueMusic{}
- SHARED numberofjumpadrs,modid$
- success.b=0
- Select modid$
- Case "GMOD"
- continuemusic.l=Start(0)+$24
- If numberofjumpadrs>5
- MOVEM.l d0-d7/a0-a6,-(a7)
- MOVE.l #0,D0
- GetReg A1,continuemusic
- JSR (A1)
- PutReg D0,success
- MOVEM.l (a7)+,d0-d7/a0-a6
- EndIf
- Case "IFF"
- Volume 3,63
- Case "MOD"
- PauseModule
- success=True
- Default
- If StartMusic{}="" Then success=True
- End Select
- Function Return success
- End Function
-
- Function.b TimerModes{}
- SHARED modid$
- timermodes.b=0
- Select modid$
- Case "GMOD"
- vblank50.l=Start(0)+$28 ;VBlank50 offset
- vblank60.l=Start(0)+$2C ;VBlank60 offset
- timertick.l=Start(0)+$50 ;TimerTick offset
- tempnumber1.w=Peek.w(vblank50) ;Which tempos are supported?
- tempnumber2.w=Peek.w(vblank60)
- tempnumber3.w=Peek.w(timertick)
- If tempnumber1<>$4E75 Then timermodes+1
- If tempnumber2<>$4E75 Then timermodes+2
- If tempnumber3<>$4E75 Then timermodes+4
- Default
- timermodes=3
- End Select
- Function Return timermodes
- End Function
-
- Function.b Interrupt{}
- SHARED modid$,thxInterrupt,thxreplayeradr.l,qcreplayadr.l,fucoreplayadr.l,fr_dataadr.l
- success=True
- Select modid$
- Case "FRED"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a0,Peek.l(fr_dataadr)
- JSR 4(a0) ;DudelDiDum
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "EMOD"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a0,qcreplayadr
- JSR 8(a0)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "FUCO"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a0,fucoreplayadr
- JSR 4(a0)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "THX"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a2,thxreplayeradr+thxInterrupt
- JSR (a2)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "DWN"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg a0,Start(0)
- JSR $e(a0)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "MED"
- PlayMed
- End Select
- Function Return success
- End Function
-
- Function.b Vblank50{}
- SHARED numberofjumpadrs,modid$
- success.b=0
- Select modid$
- Case "GMOD"
- vblank50.l=Start(0)+$28 ;VBlank50 offset
- If numberofjumpadrs>6
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg A1,vblank50 ;Actually PLAYS the MOD :)
- JSR (A1)
- MOVEM.l (a7)+,d0-d7/a0-a6
- success=True
- EndIf
- Default
- success=Interrupt{}
- End Select
- Function Return success
- End Function
-
- Function.b Vblank60{}
- SHARED numberofjumpadrs,modid$
- success.b=0
- Select modid$
- Case "GMOD"
- vblank60.l=Start(0)+$2C ;VBlank60 offset
- If numberofjumpadrs>7
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg A1,vblank60 ;Actually PLAYS the MOD :)
- JSR (A1)
- MOVEM.l (a7)+,d0-d7/a0-a6
- success=True
- EndIf
- Default
- success=Interrupt{}
- End Select
- Function Return success
- End Function
-
- Function.b Channel0{}
- SHARED numberofjumpadrs,modid$
- Select modid$
- Case "GMOD"
- channel0.l=Start(0)+$30
- If numberjumpadrs>8
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg A1,channel0
- JSR (A1)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Pop Select
- Function Return True
- EndIf
- End Select
- Function Return False
- End Function
-
- Function.b Channel1{}
- SHARED numberofjumpadrs,modid$
- Select modid$
- Case "GMOD"
- channel1.l=Start(0)+$34
- If numberjumpadrs>9
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg A1,channel1
- JSR (A1)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Pop Select
- Function Return True
- EndIf
- End Select
- Function Return False
- End Function
-
- Function.b Channel2{}
- SHARED numberofjumpadrs,modid$
- Select modid$
- Case "GMOD"
- channel2.l=Start(0)+$38
- If numberjumpadrs>10
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg A1,channel2
- JSR (A1)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Pop Select
- Function Return True
- EndIf
- End Select
- Function Return False
- End Function
-
- Function.b Channel3{}
- SHARED numberofjumpadrs,modid$
- Select modid$
- Case "GMOD"
- channel3.l=Start(0)+$3C
- If numberjumpadrs>11
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg A1,channel3
- JSR (A1)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Pop Select
- Function Return True
- EndIf
- End Select
- Function Return False
- End Function
-
- Function.l GetNumSongs{}
- SHARED numberofjumpadrs,modid$,maxsongadr.l,thxreplayeradr.l,thxBSS_P,thx_pSubsongs,header.l
- success.l=1
- Select modid$
- Case "GMOD"
- getnumsongs.l=Start(0)+$40
- If numberofjumpadrs>12
- MOVEM.l d0-d7/a0-a6,-(a7)
- MOVE.l #1,D0
- GetReg A1,getnumsongs
- JSR (A1)
- PutReg D0,success
- MOVEM.l (a7)+,d0-d7/a0-a6
- EndIf ;get ptr to
- Case "THX" ;players public memory
- success=Peek.b(thxreplayeradr+thxBSS_P+thx_pSubsongs) ;and get nr. of
- Case "FRED" ;subsongs from there
- success=Peek.l(maxsongadr)
- Case "SID"
- success=Peek.w(header+$e) ;I *think* this is right :)
- End Select
- Function Return success
- End Function
-
- Statement SetSongNum{success.l}
- SHARED songnumadr.l
- Poke.l songnumadr,success
- End Statement
-
- Function.s GetSongName{}
- SHARED numberofjumpadrs,modid$,songnumadr.l,header.l
- songname$=""
- Select modid$
- Case "GMOD"
- getsongname.l=Start(0)+$44 ;GetSongName offset
- If numberofjumpadrs>13 ;Checking to see if these functions actually exist!
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg d0,Peek.l(songnumadr)
- SUB.l #1,d0
- GetReg A1,getsongname
- JSR (A1) ;Is the song named?
- PutReg D0,check.l
- MOVEM.l (a7)+,d0-d7/a0-a6
- If check>0 ;Apparently it is.
- songname$=Peek.s(check)
- EndIf
- EndIf
- Case "SID"
- songname$=Peek.s(header+$16)
- Case "MOD"
- songname$=GetModuleName$(0)
- End Select
- Function Return songname$
- End Function
-
- Function.s GetSongAuthor{}
- SHARED numberofjumpadrs,modid$,header
- songauthor$=""
- Select modid$
- Case "GMOD"
- getsongauthor.l=Start(0)+$48 ;GetSongAuthor offset
- If numberofjumpadrs>14
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg d0,Peek.l(SongNum)
- SUB.l #1,d0
- GetReg A1,getsongauthor
- JSR (A1) ;Have they given us an author name?
- PutReg D0,check.l
- MOVEM.l (a7)+,d0-d7/a0-a6
- If check>0 ;Sure have!
- songauthor$=Peek.s(check)
- EndIf
- EndIf
- Case "SID"
- songauthor$=Peek.s(header+$36)
- Case "FRED"
- songauthor$="Frederic Hahn"
- Case "DWN"
- songauthor$="Dave Whittaker"
- End Select
- Function Return songauthor$
- End Function
-
- Function.b GetFrequency{}
- SHARED numberofjumpadrs,modid$
- success.b=False
- Select modid$
- Case "GMOD"
- getfrequency.l=Start(0)+$4C
- If numberofjumpadrs>15
- MOVEM.l d0-d7/a0-a6,-(a7)
- MOVE.l #0,D0
- GetReg A1,getfrequency
- JSR (A1)
- PutReg D0,success
- MOVEM.l (a7)+,d0-d7/a0-a6
- EndIf
- End Select
- Function Return success
- End Function
-
- Function.b TimerTick{}
- SHARED numberofjumpadrs,modid$
- Select modid$
- Case "GMOD"
- timertick.l=Start(0)+$50 ;TimerTick offset
- If numberofjumpadrs>16
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg A1,timertick ;Actually PLAYS the MOD :)
- JSR (A1)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Pop Select
- Function Return True
- EndIf
- End Select
- Function Return False
- End Function
-
- Function.s GetMakerName{}
- SHARED numberofjumpadrs,modid$
- title$=""
- Select modid$
- Case "GMOD"
- getmakername.l=Start(0)+$54 ;GetMakerName offset
- If numberofjumpadrs>17
- MOVEM.l d0-d7/a0-a6,-(a7)
- MOVE.l #0,D0
- GetReg A1,getmakername
- JSR (A1) ;And what helped create this song?
- PutReg D0,check.l
- MOVEM.l (a7)+,d0-d7/a0-a6
- If check>0
- title$=Peek.s(check)
- EndIf
- EndIf
- Case "FRED"
- title$="FredMonitor"
- Case "EMOD"
- title$="QuadraComposer 2.1"
- Case "FUCO"
- title$="Future Composer v1.02"
- End Select
- Function Return title$
- End Function
-
- Function.l Hook{HookFlags.l,HookStructure.l}
- SHARED numberofjumpadrs,modid$
- success.l=0
- Select modid$
- Case "GMOD"
- hook.l=Start(0)+$58
- If numberofjumpadrs>18
- MOVEM.l d0-d7/a0-a6,-(a7)
- MOVE.l #0,D0
- GetReg D1,HookFlags
- GetReg A0,HookStructure
- GetReg A1,hook
- JSR (A1)
- PutReg D0,success
- MOVEM.l (a7)+,d0-d7/a0-a6
- EndIf
- End Select
- Function Return success
- End Function
-
- Function.b Jump{Position.l}
- SHARED numberofjumpadrs,modid$
- success.b=0
- Select modid$
- Case "GMOD"
- jump.l=Start(0)+$5C
- If numberofjumpadrs>19
- MOVEM.l d0-d7/a0-a6,-(a7)
- MOVE.l #0,D0
- GetReg D1,Position
- GetReg A1,jump
- JSR (A1)
- PutReg D0,success
- MOVEM.l (a7)+,d0-d7/a0-a6
- EndIf
- Case "MED"
- JumpMed Position
- success=True
- Case "MOD"
- ModulePositionJump Position
- success=True
- End Select
- Function Return success
- End Function
-
- Function.b SetVolume{Left.l,Right.l}
- SHARED numberofjumpadrs,modid$,thx_pMainVolume,thxreplayeradr.l,thxBSS_P,qcreplayadr.l
- success.b=0
- Select modid$
- Case "GMOD"
- setvolume.l=Start(0)+$60
- If numberofjumpadrs>20
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg D0,Left
- GetReg D1,Right
- GetReg A1,setvolume
- JSR (A1)
- MOVEM.l (a7)+,d0-d7/a0-a6
- success=True
- EndIf
- ; Case "FRED"
- ; success=True
- ; MOVEM.l d0-d7/a0-a6,-(a7)
- ; MOVE.l fr_data(pc),a0
- ; JSR 12(a0) ;Seems to fade the music, there might be some other registers to effect it that I don't know about
- ; MOVEM.l (a7)+,d0-d7/a0-a6
- Case "EMOD"
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg d2,((Left/4)+(Right/4))/2
- GetReg a0,qcreplayadr
- JSR $14(a0)
- MOVEM.l (a7)+,d0-d7/a0-a6
- Case "IFF"
- Volume 1,Left/4
- Volume 2,Right/4
- Case "THX"
- success=True
- Poke.b thxreplayeradr+thxBSS_P+thx_pMainVolume,((Left/4)+(Right/4))/2
- Case "MOD"
- TrackerVolume ((Left/4)+(Right/4))/2
- success=True
- Case "MED"
- SetMedVolume ((Left/4)+(Right/4))/2
- success=True
- End Select
- Function Return success
- End Function
-
- Function.s GetScroll{}
- SHARED numberofjumpadrs,modid$ ;Look, but don't touch!
- success$=""
- Select modid$
- Case "GMOD"
- getscroll.l=Start(0)+$64
- If numberofjumpadrs>21
- MOVEM.l d0-d7/a0-a6,-(a7)
- GetReg A1,getscroll
- JSR (A1)
- PutReg D0,check.l
- MOVEM.l (a7)+,d0-d7/a0-a6
- If check>0
- success$=Peek.s(check)
- EndIf
- EndIf
- Case "MOD"
- For success.b=0 To 30
- If ModuleSampleName(0,success)<>""
- success$+ModuleSampleName(0,success)+" "
- EndIf
- Next
- End Select
- Function Return success$
- End Function
-
- Goto endincludesource
-
- .thxReplayer:
- IncBin "bin/THX-Replayer.BIN"
-
- .QCReplay:
- IncBin "bin/QuadraComposer.bin"
-
- .FUCOReplay:
- IncBin "bin/FutureComposer.bin"
-
- .SongNum:
- Dc.l 1
-
- .MaxSong:
- Dc.l 1
-
- .MaxSong2:
- Dc.l 1
-
- .fr_data:
- Dc.l 0
-
- Dc.b "$VER: BlitzPlay v0 1997 Toby Zuijdveld"
- Even
-
- .endincludesource:
-
- ;*****************************************************************
- ;* The End
- ;*****************************************************************
-
-